package com.vhall.component.dao.interactive;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.vhall.component.entity.interactive.entity.QuestionAnswersEntity;
import com.vhall.component.entity.interactive.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author guoxin.wang
 * @create 2021-05-11
 */
@Mapper
@Repository
public interface QuestionAnswersMapper extends BaseMapper<QuestionAnswersEntity> {

    /**
     * 根据问卷id信息查询回答的总数
     *
     * @param questionIds 参数
     * @return
     */
    List<QuestionCountVo> getAnswerCountByQuestionIds(List<Integer> questionIds);

    /**
     * 查询当前用户是否填写了问卷
     *
     * @param questionIds 参数
     * @param accountId   参数
     * @return
     */
    List<QuestionCountVo> getWhetherMap(@Param("list") List<Integer> questionIds, @Param("accountId") Integer accountId);

    /**
     * 获取问卷提交详情
     *
     * @param roomId
     * @param questionId
     * @param offset
     * @param size
     * @return
     */
    List<QuestionSubmitInfoRspVo> selectSubmitInfo(String roomId, Integer questionId, Integer offset, Integer size);

    /**
     * 获取位参与问卷的 参会人
     *
     * @param questionId
     * @param roomId
     * @param offset
     * @param size
     * @return
     */
    List<QuestionUnAnswerJoiner> selectUnAnswerJoiner(Integer questionId, String roomId, Integer offset, Integer size, @Param("list") List<Integer> accountIds);

    /**
     * 分组求和
     *
     * @param accountId 用户id
     * @param beginDate 开始时间
     * @param endDate   结束时间
     * @return 返回值
     */
    Integer countGroupByRoomIdAndQuestionId(Integer accountId, String beginDate, String endDate);

    /**
     * 分组查询
     *
     * @param accountId 用户id
     * @param beginDate 开始时间
     * @param endDate   结束时间
     * @param offset    开始索引
     * @param size      大小
     * @return 返回值
     */
    List<QuestionStatDTO> statGroupByRoomIdAndQuestionId(Integer accountId, String beginDate, String endDate,
                                                         Integer offset, Integer size);

    /**
     * 统计回答的数量
     *
     * @param roomId    房间id
     * @param accountId 用户id
     * @param beginDate 开始时间
     * @param endDate   结束时间
     * @return 返回值
     */
    Integer countAnswerNum(@Param("roomId") String roomId, @Param("accountId") Integer accountId,
                           @Param("beginDate") String beginDate, @Param("endDate") String endDate);

    /**
     * 根据问卷id和房间id获取答案数目
     *
     * @param questionId 问卷id
     * @param roomId     房间id
     * @return 返回值
     */
    Integer getAnswerCountByQuestionIdAndRoomid(@Param("questionId") Integer questionId, @Param("roomId") String roomId);

    /**
     * accountStatisticsList
     *
     * @param req 参数
     * @return 返回值
     */
    List<QuestionConsoleLogRspVO> accountStatisticsList(QuestionConsoleLogReqVO req);

    /**
     * accountStatisticsListForCount
     *
     * @param req 参数
     * @return 返回值
     */
    Integer accountStatisticsListForCount(QuestionConsoleLogReqVO req);


    /**
     * 获取某个房间开播后的参与问答的人
     *
     * @param roomId    房间id
     * @param startDate 开始时间
     * @param offset    开始索引
     * @param pageSize  每页页数
     * @return 返回值
     */
    List<QuestionAnswersEntity> queryAllPartakeAccounts(@Param("roomId") String roomId, @Param("startDate") String startDate, Integer offset, Integer pageSize);

    /**
     * 获取某个房间开播后的参与问答的人
     *
     * @param roomId    房间id
     * @param startDate 开始时间
     * @return 返回值
     */
    int queryAllPartakeAccountsCount(@Param("roomId") String roomId, @Param("startDate") String startDate);

    /**
     * 根据观众端用户id和所观看的房间id获取问卷答案表的问卷id集合
     *
     * @param roomId
     * @param accountId
     * @return
     */
    List<Integer> selectQuestionIdsByRoomIdAndAccountId(@Param("roomId") String roomId, @Param("accountId") Integer accountId);

}
